package lc20240430;

//209 长度最小的子数组
public class Demo1 {
    public static void main(String[] args) {
        int[] nums={2,3,1,2,4,3};
        int target=7;
        System.out.println(minSubArrayLen(target, nums));
    }
    public static int minSubArrayLen(int target, int[] nums){
        int n = nums.length;
        int minLength = Integer.MAX_VALUE;  // 用来记录最小长度
        int sum = 0;  // 子数组的总和
        int start = 0;  // 子数组起始位置
        for (int end = 0; end < n; end++) {
            sum += nums[end];  // 将当前元素加到sum中
            while (sum >= target) {  // 当sum大于等于target时，尝试缩小子数组
                minLength = Math.min(minLength, end - start + 1);  // 更新最小长度
                sum -= nums[start];  // 移除子数组的起始元素
                start++;  // 子数组起始位置右移
            }
        }

        return minLength == Integer.MAX_VALUE ? 0 : minLength;
    }
}
